Testing the operation of complex systems, including software, can be time-consuming and costly and is often limited to end-result verification. Even if some testing of intermediate steps is performed, negative testing is rarely carried out, such as making sure no changes have occurred in a file system or registry or other element of the system. Yet verifying that certain activities or state changes did not occur can be critical to effective testing.